﻿using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Drawing.Printing;

namespace barcodes
{
    public partial class Form1 : Form
    {
        private string pogramName_ = "Barcodes generator";

        /// <summary>
        /// Получить имя программы
        /// </summary>
        /// <returns>Имя программы</returns>
        public string GetProgramName()
        {
            return pogramName_;
        }

        /// <summary>
        /// Конструктор главного окна приложения
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
        
        private void DrawBarcode()
        {
            
            BarcodeRenderer br = new BarcodeRenderer();
            Image b = br.GetImage(maskedTextBox1.Text, pictureBox1.Width, pictureBox1.Height, invertColorsToolStripMenuItem.Checked);

            pictureBox1.Image = b;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if ( maskedTextBox1.Text.Length == 12)
            {
                DrawBarcode();
                saveAsToolStripMenuItem.Enabled = true;
                printToolStripMenuItem.Enabled = true;
            }
            else
            {
                string str = "Необходимо ввести 12 цифр\n Вы же ввели " + maskedTextBox1.Text.Length.ToString();
                MessageBox.Show(str, GetProgramName(), MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dlgRes = MessageBox.Show("Уверенны, что хотите выйти?", GetProgramName(),
                                                        MessageBoxButtons.YesNo,MessageBoxIcon.Question);
            if (dlgRes == DialogResult.Yes)
            {
                Application.Exit();
            }
        }

        private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "(*.png)|*.png";
            DialogResult dlgRes =  dlg.ShowDialog();
            if (dlgRes == DialogResult.OK)
            {
                string path = dlg.FileName;
                try
                {
                    pictureBox1.Image.Save(path, ImageFormat.Png);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString(), GetProgramName(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox1 abBox = new AboutBox1();
            abBox.ShowDialog();
        }

        private void invertColorsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            invertColorsToolStripMenuItem.Checked = !invertColorsToolStripMenuItem.Checked;
            if (saveAsToolStripMenuItem.Enabled)
            {

                button1_Click(null, null);
            }
        }

        private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PrintDialog pDialog = new PrintDialog();
            DialogResult res = pDialog.ShowDialog();
            if (res == DialogResult.OK)
            {
                PrintDocument doc = new PrintDocument();
                doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
                doc.Print();
            }
        }

        private void doc_PrintPage(object sender, PrintPageEventArgs e)
        {
            float x = 10;
            float y = 10;
            e.Graphics.DrawImage(pictureBox1.Image, x,y);
        }

        private void maskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            if (maskedTextBox1.MaskFull)
            {
                maskToolTip.ToolTipTitle = "Слишком длинная последовательнсть";
                maskToolTip.Show("Можно вводить лишь 12 символов.",maskedTextBox1,0,-20,5000);
            }
            if (e.Position == maskedTextBox1.Mask.Length)
            {
                maskToolTip.ToolTipTitle = "Попытка ввести символы за границей поля";
                maskToolTip.Show("Нельзя вводить символы за границей текстового поля",maskedTextBox1,0,-20,5000);
            }
            else
            {
                maskToolTip.ToolTipTitle = "Неверные символы";
                maskToolTip.Show("Можно вводить лишь цифры (0-9)", maskedTextBox1, 0, -20, 5000);
            }
        }

        private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            maskToolTip.Hide(maskedTextBox1);
            if (maskedTextBox1.Text.Length == 12)
            {
                saveAsToolStripMenuItem.Enabled = true;
                printToolStripMenuItem.Enabled = true;
                button1.Enabled = true;
            }
            if (e.KeyChar == 13)
            {
                button1_Click(null, null);
            }
        }

    }
}
